package com.gj.demojuc.chap09;

/**
 * volatile关键字解决共享变量可见性问题
 * 在多线程编程中，可见性是指当一个线程修改了共享变量的值后，其他线程能够立即看到这个修改后的值。
 * 然而，由于现代计算机体系结构中存在缓存等优化机制，可能导致某个线程对共享变量的修改对其他线程不可见。
 */
public class VolatileDemo {
    //volatile关键字修饰多线程共享变量
    public volatile static  Integer flag = 1;
    public static void main(String[] args) throws InterruptedException {
        //创建一个线程
        new Thread(()->{
            //
            System.out.println(Thread.currentThread().getName() + flag);//这里输出的是1
            while (flag==1){}//如果falg是1则死循环 5秒后会变成2因为加了volatile关键字共享变量具有可见性
            System.out.println(Thread.currentThread().getName() + flag);//
        }).start();
        //主线程
        Thread.sleep(5000);
        flag = 2;//复制共享变量到工作内存（本地内存）然后修改为2
        System.out.println(Thread.currentThread().getName() + flag);//5秒后输出2
    }
}
